/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._22_new;

/**
 *
 * 输入一个链表，输出该链表中倒数第k个节点。为了符合大多数人的习惯，本题从1开始计数，即链表的尾节点是倒数第1个节点。例如，一个链表有6个节点，从头节点开始，它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
 *
 *  
 *
 * 示例：
 *
 * 给定一个链表: 1->2->3->4->5, 和 k = 2.
 *
 * 返回链表 4->5.
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._22_new
 * @ClassName: GetKthFromEnd
 * @Author: linyaonan
 * @Date: 2020/3/25 15:55
 */
public class GetKthFromEnd {

    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode org = head;
        // 先让head节点向后移动k位
        try {
            for (int i = 0; i < k; i++) {
                head = head.next;
            }
            // 当head移动到尾部，则表示原始节点移动到倒数k位
            while (head != null) {
                head = head.next;
                org = org.next;
            }
            return org;
        } catch (Exception e) {
            // 异常情况：k大于链表长度时
            return null;
        }
    }

}
